package reservation;

import java.io.IOException;
import java.io.Serializable;

import errors.NegativeValueException;
import errors.StartStopException;

/**
 * Classe Admin : modélisation d'un administrateur pouvant effectuer des
 * opérations avec la base de données
 * 
 * @author Alexandre Boursier and Mamadou Diallo and Cyril Gorrieri and Emmanuel
 *         Menage
 * @version 2012.01.23
 */

public class Admin extends Personne implements Serializable {
    private static final long serialVersionUID = 4508634682007972374L;

    public Admin(String login) {
        super(login);
    }

    /**
     * Demande au serveur d'ajouter un transport
     * 
     * @param t
     *            Le transport à ajouter
     * @return True si le transport est bien ajouté sinon false.
     * @throws NumberFormatException
     * @throws NullPointerException
     * @throws IOException
     * @throws NegativeValueException
     * @throws StartStopException
     */
    public boolean add(Transport t) throws NumberFormatException,
    NullPointerException, IOException, NegativeValueException,
    StartStopException {
        return Serveur.getInstance().add(t);
    }

    /**
     * Demande au serveur d'ajouter un trajet
     * 
     * @param t
     *            Le trajet à ajouter
     * @return True si le trajet est bien ajouté sinon false.
     * @throws NumberFormatException
     * @throws NullPointerException
     * @throws IOException
     * @throws NegativeValueException
     * @throws StartStopException
     */
    public boolean add(Trajet t) throws NumberFormatException,
    NullPointerException, IOException, NegativeValueException,
    StartStopException {
        return Serveur.getInstance().add(t);
    }

    /**
     * Demande au serveur de modifier un transport
     * 
     * @param t
     *            Le transport modifier
     * @return True si le transport est modifié sinon false
     * @throws NumberFormatException
     * @throws NullPointerException
     * @throws IOException
     * @throws NegativeValueException
     * @throws StartStopException
     */
    public boolean alter(Transport t) throws NumberFormatException,
    NullPointerException, IOException, NegativeValueException,
    StartStopException {
        return Serveur.getInstance().alter(t);
    }

    /**
     * Demande au serveur de modifier un trajet
     * 
     * @param t
     *            Le trajet modifier
     * @return True si le trajet est modifié sinon false
     * @throws NumberFormatException
     * @throws NullPointerException
     * @throws IOException
     * @throws NegativeValueException
     * @throws StartStopException
     */
    public boolean alter(Trajet t) throws NumberFormatException,
    NullPointerException, IOException, NegativeValueException,
    StartStopException {
        return Serveur.getInstance().alter(t);
    }

    /**
     * Demande au serveur de supprimer un transport
     * 
     * @param t
     *            Le transport à supprimer
     * @return True si le transport est supprimé sinon false
     * @throws NumberFormatException
     * @throws NullPointerException
     * @throws IOException
     * @throws NegativeValueException
     * @throws StartStopException
     */
    public boolean delete(Transport t) throws NumberFormatException,
    NullPointerException, IOException, NegativeValueException,
    StartStopException {
        return Serveur.getInstance().delete(t);
    }

    /**
     * Demande au serveur de supprimer un trajet
     * 
     * @param t
     *            Le trajet à supprimer
     * @return True si le trajet est supprimé sinon false
     * @throws NumberFormatException
     * @throws NullPointerException
     * @throws IOException
     * @throws NegativeValueException
     * @throws StartStopException
     */
    public boolean delete(Trajet t) throws NumberFormatException,
    NullPointerException, IOException, NegativeValueException,
    StartStopException {
        return Serveur.getInstance().delete(t);
    }

    /**
     * Demande au serveur d'enregistrer les modification apportées
     */
    public void save() {
        Serveur.getInstance().save();
    }

    /**
     * Demande au serveur un transport
     * 
     * @param id
     *            Id du transport voulu
     * @return Un transport si il existe sinon null
     */
    public Transport obtenirTransport(int id) {
        return Serveur.getInstance().obtenirTransport(id);
    }

    /**
     * Demande au serveur un trajet
     * 
     * @param id
     *            Id du trajet voulu
     * @return Un trajet si il existe sinon null
     */
    public Trajet obtenirTrajet(int id) {
        return Serveur.getInstance().obtenirTrajet(id);
    }

    /**
     * Demande au serveur d'afficher la liste des transports
     */
    public void listeTransports() {
        Serveur.getInstance().listeTransports();
    }

    /**
     * Demande au serveur d'afficher la liste des trajets
     */
    public void listeTrajets() {
        Serveur.getInstance().listeTrajets();
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }
}
